#!/usr/bin/env bash

if [ $# -ge 4 ]; then
    echo "Shell 传递参数$#个！"
	echo "执行的文件名：$0"
	echo "第一个参数【原始HDFS待处理文件目录】为：$1"
	echo "第二个参数【HIVE外部表文件临时目录】为：$2"
	echo "第三个参数【导入完毕HDFS STAGE目录】为：$3"
        echo "第四个参数【需要转换的协议】为：$4"
else
    echo "参数错误！"
    echo "执行的文件名：$0 第一个参数 第二个参数 第三个参数 第四个参数"
	echo "第一个参数【原始HDFS待处理文件目录】"
	echo "第二个参数【HIVE外部表文件临时目录】"
	echo "第三个参数【导入完毕HDFS STAGE目录】"
        echo "第四个参数【需要转换的协议】"
    exit 1
fi
###定义一次转换的最大文件数量
LIMIT_NUM=50
ENV_FILE=shell_env.sh
CUR_PATH=$(cd "$(dirname "$0")"; pwd)
. $CUR_PATH/$ENV_FILE
start=$(date +%s)
echo "STARTTIME：`date '+%Y%m%d-%H%M%S'`"

#awk命令按“/”分割第八个为包含全部路径文件名称
files=`hadoop fs -ls $1/*/$4/*.snappy |  awk -F " " '{print $8}'`
#原始文件移到hive待导入hive外部表Location
count=0
for pathname in $files
do
    if [ $count -le $LIMIT_NUM ];then
	echo "PATHNAME: $pathname"
        count=$((count+1))
        hadoop fs -mv $pathname $2/
    fi
done
echo "本次从TA/$4下移动了${count}个文件"
tmp_count=`hadoop fs -ls $2 | grep -v Found | wc -l`
echo "总共转了${tmp_count}个文件"
if [ $tmp_count -eq 0 ];then
    echo "没有可转换的文件，结束脚本"
    return
fi
hive_db=$YARD_NAME
. $CUR_PATH/hive_parquet_scripts/hive_parquet_insert_$4.sh $hive_db

if [ $? -ne 0 ]; then
   echo "执行脚本失败！！！. $CUR_PATH/hive_parquet_scripts/hive_parquet_insert_$4.sh"
   return
fi

#导入后文件移到stage阶段存储目录，待后续没有导入问题后手工批量删除历史文件
hadoop fs -mv $2/*.snappy $3/

#应对【HIVE外部表文件临时目录】下由于文件重名没有全部移走snappy的处理
#重命名文件，放入【导入完毕HDFS STAGE目录】
files=`hadoop fs -ls $2/*.snappy |  awk -F " " '{print $8}'`

for pathname in $files
do
	echo " DUPLICATION PATHNAME: $pathname"
	#awk命令按“/”分割第七个为单独文件名称
	filename=`echo $pathname  | awk -F "/" '{print $5}'`
	hadoop fs -mv $pathname $3/$filename.`date +%Y%m%d%H%M%S`.snappy
done

end=$(date +%s)
echo "ENDTIME：`date '+%Y%m%d-%H%M%S'`"
time=$(( $end - $start ))
echo "DURATION(S): $time"